package com.heima.wemedia.service.impl;

import com.alibaba.fastjson.JSON;
import com.heima.client.schedule.ITaskClient;
import com.heima.common.exception.CustomException;
import com.heima.model.common.dtos.ResponseResult;
import com.heima.model.common.dtos.TaskDto;
import com.heima.model.common.enums.AppHttpCodeEnum;
import com.heima.model.common.pojos.wemedia.WmNews;
import com.heima.wemedia.service.WmAutoScanService;
import com.heima.wemedia.service.WmTaskService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

/**
 * @author 陈辉
 * @data 2024 10:04
 */
@Service
@Slf4j
public class WmTaskServiceImpl implements WmTaskService {
    @Autowired
    private ITaskClient taskClient;
    @Autowired
    private WmAutoScanService wmAutoScanService;

    /**
     * 添加审核文章任务
     *
     * @param wmNews
     */
    @Async
    public void addTask(WmNews wmNews) {
        //远程调用schedule微服务，添加一个审核文章的任务
        TaskDto taskDto = new TaskDto();
        //1001 : 表示自媒体业务线
        taskDto.setTaskType(1001);      //任务类型：描述当前任务属于哪个业务线
        //1 : 表示审核文章
        taskDto.setPriority(1);          //任务优先级：描述当前任务属于哪个业务线下的具体某个业务点
        taskDto.setExecuteTime(wmNews.getPublishTime().getTime());  //任务执行时间
        taskDto.setParameters(String.valueOf(wmNews.getId()));      //任务携带的参数：任务一旦被消费，需要的核心业务数据
        taskClient.addTask(taskDto);        //调用延迟微服务，添加审核文章任务
    }

    /**
     * 拉取到期任务并消费处理
     */
    @Scheduled(cron = "0/1 * * * * ? ")
    public void pullTask() {
        //1. 拉取redis中的List中的到期数据，并消费处理
        ResponseResult response = taskClient.pullTask(1001, 1);
        try {
            if (200 == response.getCode()) {
                String taskDtoJSOn = response.getData().toString();
                TaskDto taskDto = JSON.parseObject(taskDtoJSOn, TaskDto.class);
                String newsId = taskDto.getParameters();
                log.info("-------拉取到任务数据：开启文章审核逻辑-------{}", newsId);
                wmAutoScanService.autoScan(Integer.valueOf(newsId));
            }
        } catch (Exception e) {
            throw new CustomException(AppHttpCodeEnum.DATA_NOT_EXIST);
        }

    }



}
